import "reflect-metadata";

// 在类上定义元数据
@Reflect.metadata("decribe", "都是地球人")
class People {
  @Reflect.metadata("deccible", "姓名不能包含非法汉字")
  username = "wangwu";

  @Reflect.metadata("importinfo", "去吃陶然居好吗")
  eat() {}
}

class ChinesePeople extends People {
  guoYear() {}
}

console.log(Reflect.getMetadata("decribe", People));
// 第二个参数时原型
console.log(Reflect.getMetadata("importinfo", People.prototype, "eat"));

if (Reflect.hasMetadata("importinfo", People.prototype, "eat")) {
  console.log("hasMetadata => people 原型上存在eat方法的importinfo元数据");
}

// 子类获取父类原型上的方法 -- hasMetadata
if (Reflect.hasMetadata("importinfo", ChinesePeople.prototype, "eat")) {
  console.log(
    "hasMetadata => ChinesePeople 原型上通过继承也获取了eat方法和eat方法元数据"
  );
}

if (Reflect.hasOwnMetadata("importinfo", ChinesePeople.prototype, "eat")) {
  console.log(
    "hasMetadata => ChinesePeople 原型上存在eat方法的importinfo元数据"
  );
} else {
  console.log(
    "hasMetadata => ChinesePeople 原型上不存在eat方法的importinfo元数据"
  );
}

export {};
